from Tkinter import *
import tkMessageBox
import xmlrpclib
import sys
"""
import tkFileDialog
import pickle"""
        
# Le fichier recupere depuis le serveur contient cette classe conteneur
# Il est interdit de supprimer sa definition


class Controleur:
    def __init__(self):
        self.vue=VueClient(self,400,300)
        self.serveur = xmlrpclib.ServerProxy('http://localhost:8000')
        self.vue.fenetrePrincipale.mainloop()
        pass

    def chargerVue(self,NomVue):
        
        " Recuperation de la vue depuis le serveur"
        s=self.serveur.envoyerVue(NomVue)
        print s
        " Enregistrement des donnees localement"
        " Toutjours sous le nom de vue.py"
        f=open('vue.py','wb')       
        f.writelines(s)
        f.close()
        pass
    
    def ObtenirTable(self):
        return pickle.loads(self.serveur.ObtenirTable())
        
    def ObtenirChamp(self, NomTable):
        return pickle.loads(self.serveur.ObtenirChamp(pickle.dumps(NomTable)))

    def EffacerTable(self, NomTable):
        pass

    def EntrerEnregistrement(self, LaTable):
        return pickle.loads(self.serveur.EntrerEnregistrement(pickle.dumps(LaTable)))

    def ObtenirEnregistrement(self, LaTable):
        return pickle.loads(self.serveur.ObtenirEnregistrement(pickle.dumps(LaTable)))

    def Commit(self):
        return pickle.loads(self.serveur.Commit())
    
    def CreerTable(self, LaTable):
        return pickle.loads(self.serveur..CreerTable(pickle.dumps(LaTable)))

class VueClient(object):
    def __init__(self,parent,width,height):
        self.parent=parent
        self.fenetrePrincipale=Tk()
        self.x=self.fenetrePrincipale.winfo_screenwidth()/2-(width/2)
        self.y=self.fenetrePrincipale.winfo_screenheight()/2-(height/2)       
        self.fenetrePrincipale.geometry(str(width)+'x'+str(height)+'+'+str(self.x)+'+'+str(self.y))
        self.fenetrePrincipale.config(bg='#046380')
        self.fenetrePrincipale.title("PERP")
        self.menuPrincipal()
        self.serveur = xmlrpclib.ServerProxy('http://localhost:8000')
        self.VueActive=None


    def menuPrincipal(self):
        self.menu = Menu(self.fenetrePrincipale)
        self.fenetrePrincipale.config(menu=self.menu)

        listeMenu=["Fichier","Aide"]

        self.barreMenu=[]
        for i in range(8):
            self.barreMenu.append(Menu(self.menu, tearoff=0))
        for i in range(len(listeMenu)):
            self.menu.add_cascade(label=listeMenu[i], menu=self.barreMenu[i])

        
        self.barreMenu[0].add_command(label="Connexion", command=self.Connexion)
        self.barreMenu[0].add_command(label="Deconnexion", command=self.Deconnexion,state='disabled')
        self.barreMenu[0].add_separator()

        self.barreMenu[0].add_command(label="Quitter", command=self.Quitter)



    def Connexion(self):
#        self.fenetreConnexion=Toplevel() #Tk()
#        self.fenetreConnexion.config(bg='#7FC6BC')
#        self.fenetreConnexion.title("Login")
        self.parent.chargerVue('vue.py')        
        #try:       
        import vue
        self.VueActive=vue.TK(self.fenetrePrincipale,boss=self)            
        #except:
        #    print 'Impossible de charger la vue'
        #    exit(1)
        pass

    def Deconnexion(self):
        pass
    
    def Quitter(self):
        if tkMessageBox.askyesno("Attention", "Vous voulez vraiment quitter ce programme?"):
            sys.exit(0)


if __name__ == '__main__':
    controleur=Controleur()


